package com.shengzai

object Code30Trait {
  def main(args: Array[String]): Unit = {
    val student = new StudentScala()
    student.play()
    student.playOther()

    // 创建一个student对象，并且动态混入 新的trait 使其具有新的功能
    val student2 =  new StudentScala() with LearnSkill
    student2.skill()

  }
}

/**
 * Trait 在Scala中并没有Java中的抽象类以及接口，所以由Trait来做相关的操作
 * Trait  -> 特质
 */

trait PlaySkill{
  def play(): Unit = {
    println("可以玩游戏...")
  }

  // 定义一个抽象的函数，当class类继承 该特质后，需要实现其具体的函数逻辑
  def playOther()
}


trait LearnSkill{
  def skill(): Unit = {
    println("学生可以学习知识...")
  }
}


// 通过extends继承特质后，可以获取其非抽象的函数，直接调用
class StudentScala extends PlaySkill{
  override def playOther(): Unit = {
    println("学生可以玩自己的游戏..")
  }
}







